package com.example.util;

import java.util.Set;

import com.alibaba.fastjson.JSONObject;

public class JSONUtil {

	/**
	 * 
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年9月22日 下午6:18:55
	 * @return
	 */
	public static final String json2GetParam(JSONObject json){
		Set<String> keys = json.keySet();
		StringBuffer paramsGet = new StringBuffer();
		for(String key: keys){
			paramsGet.append(key).append("=").append(json.get(key)).append("&");
		}
		return paramsGet.substring(0, paramsGet.length() - 1);
	}
	
//	public static final JSON bean2Json(Object obect){
//		JSON.toJSON;
//	}
	
	
	public static String Object2JsonString(Object object){
		return JSONObject.toJSONString(object);
	}
	
	
	/** 
	* 替换老json中 新json包含的字段内容，要求老json中同样存在该字段，且字段路劲必须一致.不支持json中存在jsonarray 的格式
	* 如 老json
	*  {"sellData" : {
        "_id" : null,
        "key" : "sellData",
        "name" : "售卖模块",
        "orderNo" : {
            "_id" : null
        },
        "status" : {
            "_id" : null,
            "value" : 0
        },
        "lastUpdateTime" : {
            "_id" : null,
            "value" : 0
        },
        "partNum" : {
            "_id" : null,
            "value" : "0"
        },
        "soltNum" : {
            "_id" : null,
            "value" : "0"
        }
    }}
    
     正确的 新json（正确路劲）
    {"sellData" : {
       "soltNum" : {
          "value" : "1"
        }
    }}
      错误的 新json（错误路劲） 
    {
       "soltNum" : {
          "value" : "1"
        }
    }
    
	* @param target
	* @param source void
	* @author liuhuaqing
	* @date 2018年9月13日上午9:47:24
	*/ 
	public static void replace(JSONObject target,JSONObject source)
	{
		for(String sKey:source.keySet())
		{
			Object so=source.get(sKey);
			if(target.containsKey(sKey))
			{
				Object to=target.get(sKey);
				if(to instanceof JSONObject)
				{
					replace((JSONObject)to, (JSONObject)so);
				}else
				{
					target.put(sKey, source.get(sKey));
				}
				
				
				
			}
			
		}
		
	}
	
	
	public static void main(String[] args) {
		JSONObject target=new JSONObject();
		target.put("a", "va");
		target.put("b", "vb");
		
		JSONObject t1=new JSONObject();
		t1.put("a1", 1);
		t1.put("a2", 2);
		
		JSONObject t3=new JSONObject();
		t3.put("a31", 31);
		t3.put("a32", 32);
		
		t1.put("a3", t3);
		target.put("c", t1);
		System.out.println(target.toJSONString());
		
		JSONObject source=new JSONObject();
		//source.put("a", "va替换");
		//source.put("b", "vb");
		
		JSONObject s1=new JSONObject();
		//s1.put("a1", 1);
		//s1.put("a2", 2);
		
		JSONObject s3=new JSONObject();
		s3.put("a31", 31111);
		s3.put("a32", 3222);
		
		s1.put("a3", s3);
		source.put("c", s1);
		System.out.println(source.toJSONString());
		
		JSONUtil.replace(target, source);
		
		System.out.println("替换后：");
		System.out.println(target.toJSONString());
	}
	
}
